package cn.edu.cqyz.wisdom.config;

import cn.edu.cqyz.wisdom.entity.Users;
import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTCreator;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;

import java.util.Calendar;


/**
 * JWT Token 生成器
 * Author: HAJ.it
 */

public class JwtToken {

    /**
     * 密钥
     */
    private static final String JwtSt = "HAJ@123@school";

    /**
     * 生成 token
     */
    public static String createToken(Users user) {
        JWTCreator.Builder builder = JWT.create();
        Calendar install = Calendar.getInstance();
        // 有效时间为 1 天
         install.add(Calendar.DATE,1);
//         有效时间为 1 分钟
//        install.add(Calendar.MINUTE, 1);
        // 把用户名 加入到 token 中
        builder.withClaim("id", user.getId());
        builder.withClaim("user_name",user.getUserName());
        String phone = user.getUserPhone().substring(0,3)+"***"+user.getUserPhone().substring(8,11);
        builder.withClaim("user_phone",phone);
        // 加入有效时间
        builder.withExpiresAt(install.getTime());
        return builder.sign(Algorithm.HMAC256(JwtSt));
    }

    /**
     * 解析 token
     */
    public static Users analysisToken(String token) {
        DecodedJWT jwt = null;
        jwt = JWT.require(Algorithm.HMAC256(JwtSt)).build().verify(token);
        Users user = new Users();
        // 将存入在 token 的用户信息 放入 User 对象
        user.setId(jwt.getClaim("id").asInt());
        user.setUserPhone(jwt.getClaim("user_phone").asString());
        user.setUserName(jwt.getClaim("user_name").asString());
        return user;
    }

    /**
     * 验证 token
     */
    public static Boolean verifyToken(String token) {
        if (token.isEmpty()) {
            return false;
        } else {
            DecodedJWT jwt = null;
            try {
                jwt = JWT.require(Algorithm.HMAC256(JwtSt)).build().verify(token);
            } catch (Exception e) {
                return false;
            }
        }
        return true;
    }

}
